#ifndef __DOUBLELINKLIST_H_
#define __DOUBLELINKLIST_H_

class DoubleLinkList
{
public:
using ElementType = int;
public:
    DoubleLinkList();

    void InsertTail(const ElementType&element);
    
    void InsertHead(const ElementType&element);


    // 中间插入
    void InsertByIndex(int index,const ElementType &element);

    
    // 按位置删
    void RemoveByIndex(int index);  

    // 按值删
    void RemoveElement(const ElementType&element);

    // void* 回调用


    ~DoubleLinkList();

    void show();


private:
    struct Node
    {
        Node(const ElementType &data):data(data),prev(nullptr),next(nullptr){}
        ElementType data;
        Node*next;
        Node*prev;//前置指针

    };
    
    Node* head;//头指针
    Node* tail;//尾指针
    int size;
    
};







#endif